//#include <bits/stdc++.h>
//
//using namespace std;
//
//int main()
//{
//	int n, k; cin >> n >> k;
//	
//	cout << k - (n + k) % k << endl;
//	return 0;
//}

//#include <bits/stdc++.h>
//
//using namespace std;
//
//const int N = 1e5 + 10;
//int a[N];
//int main()
//{
//	int n; cin >> n;
//	int ret = 0;
//	for(int i = 0; i <= n - 1; i++)
//	{
//		cin >> a[i];
//		if(a[i] == i) ret++;
//	}
//	if(ret == n) 
//	{
//		cout << ret << endl;
//		return 0;
//	}
//	
//	for(int i = 0; i <= n - 1; i++)
//	{
//		if(a[a[i]] == i && a[i] != i) 	
//		{
//			cout << ret + 2 << endl;
//			return 0;
//		}
//			
//	}
//	
//	cout << ret + 1 << endl;
//	
//	return 0;
//}


#include <bits/stdc++.h>

using namespace std;

const int N = 25;
struct node
{
	char l, r;
	int size;	
} a[N];
int n;
int st[N];
int ret;
void dfs(int x)
{
	st[x]++;
	ret = max(ret, ret + a[x].size);
	char begin = a[x].r;
	for(int i = 1; i <= n; i++)
	{
		if(st[i] != 2 && a[i].l == begin)
		{
			dfs(i);
		}
	}
}
int main()
{
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		string s; cin >> s;
		a[i].l = s[0], a[i].r = s.back(), a[i].size = s.size();
	}
	char begin; cin >> begin;
	for(int i = 1; i <= n; i++)
	{
		if(a[i].l == begin)
		{
			dfs(i);
		}		
	}
	cout << ret << endl;
	return 0;
}
